Flutter 混合路由

对于现存的大量移动端 App 来说,由于成本太高,通常无法全部用 Flutter 重写。更常采用的方法是,采用混合开发,保留原生业务不变,对新业务增量使用 Flutter

这涉及到同时维护原生、Flutter 两套技术栈,我们称之为混合开发

在混合技术栈中,原生页面与 Flutter 页面间相互跳转、相互传参是一个技术难点,被称为混合路由

在本文中,梳理了现有 Flutter 混合路由方案,并介绍其核心实现原理。


方案梳理

大厂方案

方案 官方多引擎 flutter_boost TRouter flutter_thrio
出品方 Gogole 阿里咸鱼 腾讯心悦 哈啰单车
核心原理 官方容器 + EngineGroup多引擎 路由收归原生
一个容器对应一个Flutter页面
连续 Flutter 跳页用一个 Activity/VC 合并
单引擎/多引擎 多引擎 单引擎 单引擎
缺点 引擎间不互通,状态难以同步 技术栈锁定:强制绑定路由、组件开发范式,迁移成本高
维护成本高:遇到问题只能修改源码,难度大
复杂度高:技术挑战大
Flutter SDK 侵入:3.0 版本中已简化
Android 通过字节码 Hook 侵入 Flutter SDK,避免直接修改引擎,仍有维护成本
引擎升级维护成本 高(3.0 低) 高?
Android容器类型
iOS容器类型
View级别容器 支持 不支持 不支持 不支持
资料地址 Flutter混合栈路由实践与优化 | HeapDump性能社区

未开源方案:字节跳动 Isolate 复用,

GitHub 开源方案

方案 wangkunhui/min_stack_manager
stars 26
核心原理 Ativity 生命周期与 Navigator 同步
单引擎/多引擎 单引擎
缺点 复杂路由场景有待完善
Android 容器类型 基于 FlutterView 自封 Activity
iOS 容器类型
资料地址

单引擎混合路由方案

官方多引擎方案,由于引擎间的通信隔离,不适合承载大规模 Flutter 逻辑。因此没有被众多厂家采用。大多数厂家仍延续 flutter_boost 的思路,在单引擎上实现混合路由。具体怎么实现呢?

混合路由包含两个核心部分:原生侧的页面容器、Flutter 侧 Navigator 页面栈

概括来说:每个容器都映射到 Navigator 页面栈中的一部分,需要在两者间,通过 Channel、RouteObserver 建立生命周期的同步关系

这其中,涉及到一系列难点:

因此,实现一套基于单引擎混合路由方案是不容易的,具有一定的难度和复杂度。


网络资源


本文作者:Maeiee

本文链接:Flutter 混合路由

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!